介绍
zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。 如果各个可迭代对象的元素个数不一致,则返回的对象长度与最短的可迭代对象相同。 利用 号操作符,与zip相反,进行解压。 zip(a,b…): 将多个列表压缩为一个二维列表 zip(a): 将一个二维列表解压为多个列表
使用
语法:
zip(iter1 [,iter2 [...]])
参数:
iter1:一个或多个可迭代对象(字符串、列表、元祖、字典)
返回值:
--> zip object
使用示例:
使用技巧
1、将两个列表合并为字典
a = [chr(ord('a')+i) for i in range(0,10)]
b = list(range(0,26))
print(a)
print(b)
print(dict(zip(a,b)))
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
{'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6, 'h': 7, 'i': 8, 'j': 9}
2、 旋转矩阵
示例1 顺时针旋转:
给定一个
n × n
的二维矩阵表示一个图像。将图像顺时针旋转90
度。
说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:
给定
matrix = [
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
思路:
先zip(*)解压为,再对每行翻转
[[1,2,3],[4,5,6],[7,8,9]] -> [[1,4,7],[2,5,8],[3,6,9]] -> [[7,4,1],[8,5,2],[9,6,3]]
或者:
[[1,2,3],[4,5,6],[7,8,9]] -> [[7,8,9],[4,5,6],[1,2,3]] -> [[7,4,1],[8,5,2],[9,6,3]]
代码:
def rotate(matrix):
matrix[:] = list(zip(*matrix[::-1]))
def rotate2(matrix):
matrix[:] = [x[::-1] for x in list(zip(*matrix))]
A = [
[1,2,3],
[4,5,6],
[7,8,9]
]
rotate(A)
print(A)
[(7, 4, 1), (8, 5, 2), (9, 6, 3)]
示例2 逆时针旋转:
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
代码:
def spiralOrder(matrix):
"""
:param matrix: 二维列表
:return: 顺时针输出的一维数组
"""
res = []
while matrix:
"""
删除第一行 然后二维数组逆时针旋转90度 继续再删除第一行 一直这样直到没有可以输出的了
[
[5, 6, 7, 8], ===> [[8,12],[7,11],[6,10],[5,9]]
[9,10,11,12]
]
"""
res += matrix.pop(0)
if matrix:
matrix[:] = zip(*list(map(reversed,matrix)))
return res
print(spiralOrder([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]))
[1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7]